from pypalo.objects import host
from pypalo.objects import cell
from pypalo.objects import database
from pypalo.objects import server
from codecs import open

from sys import stderr, __stderr__
from datetime import datetime
from os import path, getcwd

__dir__ = getcwd()
path_error = path.join(__dir__, "files//report.log")
path_xls = path.join(__dir__, "files//report.xls")
path_config = path.join(__dir__, "files//config.txt")
stderr = open(path_error, 'a')


stderr.write("\n\n--------------------------***-----------------------------\nGeneration has begun...\nLocal Date and Time: "+str(datetime.now())+"\n--------------------------***-----------------------------\n\n")

#Загрузка параметров подключения к olap
conf = open(path_config, 'r').read().splitlines()
#print(conf)
#Привсвоение параметров переменным
ip, port, login, password = conf[0], conf[1], conf[2], conf[3]

#Ввод параметров запроса для генерации xls

db_name=input('Введите название базы данных: \n')
cb_name=input('Введите название куба: \n')

columns=[]
temp=input('Введите измерения-колонки: \n')
while temp!='':
	columns+=[temp]
	temp=input()

rows=[]
temp=input('Введите измерения-строки: \n')
while temp!='':
	rows+=[temp]
	temp=input()

filters=[]
temp=input('Введите измерения-фильтры: \n')
while temp!='':
	filters+=[temp]
	temp=input()

conditions={}
for column in columns:
	temp=input('Введите условия отбора колонки: '+column+'\n')
	if temp!='':
		conditions[column]=[]
	while temp!='':
		conditions[column]+=[temp]
		temp=input()

for row in rows:
	temp=input('Введите условия отбора строки: '+row+'\n')
	if temp!='':
		conditions[row]=[]
	while temp!='':
		conditions[row]+=[temp]
		temp=input()
		
for filter in filters:
	temp=input('Введите условия отбора фильтра: '+filter+'\n')
	if temp!='':
		conditions[filter]=[temp]

aliases={}
for item in columns+rows:
	temp=input('Введите алиасы для измерения: '+item+'\n')
	if temp!='':
		aliases[item]=[]
	while temp!='':
		if temp=='None':
			temp=None
		aliases[item]+=[temp]
		temp=input()

zerosup=input('Включить подавление нулей? \n')
if zerosup=='+':
	zeros=False
else:
	zeros=True

deldubhds=input('Удалить повторяющиеся заголовки? \n')
if deldubhds=='+':
	deldubhds=True
else:
	deldubhds=False

#Создания объекта lol с заданными параметрами
hst=host(ip, port)
usr=hst.User(login, password)
srv=usr.Server()
srv_dict=srv.dictionary()
db_id=srv_dict['names'][db_name]
db=srv.Database(db_id)
db_dict=db.dictionary()
cb_id=db_dict['cubes']['names'][cb_name]
cb=db.Cube(cb_id)
c=cb.Cell()
l=c.Lol(columns, rows, filters, conditions, aliases, zeros)
if not zeros:
	l.supzcols()
	l.supzrows()
if deldubhds:
	l.deldubheads()

print(l.data[:4])
l.xlsgen(path_xls)



stderr.write("\nNo errors logged.\n\n\n--------------------------***-----------------------------\nGeneration has finished...\nLocal Date and Time: "+str(datetime.now())+"\n--------------------------***-----------------------------\n\n\n\n\n")


stderr.close()
stderr = __stderr__
